package modeles;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DBManager {
	public static final String PGSQL_JDBC_DRIVER = "org.postgresql.Driver" ;
	public static final String DB_USER = "landy" ;
	public static final String DB_PWD = "landy" ;

	public static String STOCK_DB_URL = "jdbc:postgresql://localhost:5432/gestion_stock" ;
	
	public Connection oStockDbCnx ;		// Connexion Ã  la base de donnÃ©es (stock_resto)
	
	public DBManager(){
    	etablishConnection ();
    }
    
    public boolean etablishConnection (){
    	boolean bConnectionRes = true;
		try {
			Class.forName (DBManager.PGSQL_JDBC_DRIVER) ;
			try {
			
				oStockDbCnx = DriverManager.getConnection (STOCK_DB_URL,DB_USER, DB_PWD) ;
			} catch (SQLException e) {
				System.err.println ("[PANIC] Erreur de connexion au serveur de Base de donnÃ©es !") ;
				bConnectionRes = false;
				e.printStackTrace();
			}
            //oCentraleDbCnx = DriverManager.getConnection ("jdbc:postgresql://192.168.0.107/centrale_dbtest","root", "root") ;
			if (oStockDbCnx != null)
			{
			    bConnectionRes = true ;
			                    
			}
			
		} catch (ClassNotFoundException _e) {
			
			System.err.println ("[PANIC] Erreur de chargement de pilote !") ;
			_e.printStackTrace () ;
			bConnectionRes = false ;
			
		}
		
		return bConnectionRes;
    }
    /*public String NVLSqlStr(String objet){
    	String result = "";
    	result = "'"+objet+"'";
    	return result;
    }*/
    /*public Utilisateur existUser(String _login, String _mdp){
    	Utilisateur bUser = null;
    	String zQueryUser = "SELECT * FROM \"UTILISATEUR\" where user_login='"+_login+"' and user_passwd = '"+_mdp+"'";
    	
		try
		{
			Statement oStmtUser = (Statement) oStockDbCnx.createStatement () ;	
			ResultSet oRsUser = (ResultSet) oStmtUser.executeQuery (zQueryUser) ;
			if (oRsUser.next ())
			{
				bUser = new Utilisateur();
				bUser.setUser_id(oRsUser.getInt("user_id"));
				bUser.setNom(oRsUser.getString("user_name"));
				bUser.setLogin(oRsUser.getString("user_login"));
				bUser.setPasswd(oRsUser.getString("user_passwd"));
				
			}
		}
		catch (SQLException _e)
		{
			System.out.println ("Erreur interne pendant la requete !") ;
			_e.printStackTrace () ;
		}
    	return bUser;
    }*/
   /* 
    public Vector<Categorie> getListCateogry(){
    	Vector<Categorie> vectRes = new Vector<Categorie>();
    	String zQueryCategory = "SELECT * FROM \"CATEGORIE\" order by categ_libelle ASC";
    	
		try
		{
			Statement oStmtCategory = (Statement) oStockDbCnx.createStatement () ;	
			ResultSet oRsCategory = (ResultSet) oStmtCategory.executeQuery (zQueryCategory) ;
			while (oRsCategory.next ())
			{
				Categorie categorie = new Categorie();
				
				categorie.setCategorie_id(oRsCategory.getInt("categ_id"));
				categorie.setLibelle(oRsCategory.getString("categ_libelle"));
				vectRes.add(categorie);
				
			}
		}
		catch (SQLException _e)
		{
			System.out.println ("Erreur interne pendant la requete !") ;
			_e.printStackTrace () ;
		}
    	return vectRes;
    }
    
    public int getMaxtypeProdId ()
	{
		int iMaxId = 0 ;
		boolean bIsCalled = true ;
		String zQuery = "SELECT LAST_VALUE, IS_CALLED FROM SEQ_ID_PRODUIT" ;
		try
		{
			Statement oStmt = oStockDbCnx.createStatement () ;	
			ResultSet oRs = oStmt.executeQuery (zQuery) ;
			if (oRs.next ())
			{
				iMaxId = oRs.getInt ("LAST_VALUE") ;
				bIsCalled = oRs.getBoolean ("IS_CALLED") ;
				if (bIsCalled)//si deja utilisie dans la base de donnees
				{
					iMaxId++ ;
				}
			}
		}
		catch (SQLException _e)
		{
			System.out.println ("Erreur interne pendant la requÃªte !") ;
			_e.printStackTrace () ;
		}
		return iMaxId ;
	}*/
    
  //enregistrment d'un produit
 /* 	public boolean storeProduct (Produit _oProduit)
  	{
  		boolean bRes = true;
  		String zQuery = "INSERT INTO \"PRODUIT\" (produit_id,produit_code,produit_libelle,categ_id,prix_vente) VALUES (nextval('seq_id_produit'), " ;
  		zQuery +=  NVLSqlStr(_oProduit.getCodeProd()) + ", " ;
  		zQuery +=  NVLSqlStr(_oProduit.getProduit_libelle()) + ", " ;
  		zQuery += _oProduit.getCateg_id() + ", " ;
  		zQuery += _oProduit.getPrix() + ") " ;
  		
  		try
  		{
  			Statement oStmt = oStockDbCnx.createStatement () ;	
  			oStmt.executeUpdate (zQuery) ;
  		}
  		catch (SQLException _e)
  		{
  			System.out.println ("Erreur interne pendant la mise Ã  jour !") ;
  			bRes = false;
  			_e.printStackTrace () ;
  		}

  		return bRes;
  		
  	}*/
  /*	
  	public Vector<Produit> getListProduct(){
  		Vector<Produit> listProduit = new Vector<Produit>();
    	String zQueryProduit = "SELECT * FROM \"PRODUIT\" order by produit_libelle ASC";
    	
		try
		{
			Statement oStmtProduit = (Statement) oStockDbCnx.createStatement () ;	
			ResultSet oRsProduit = (ResultSet) oStmtProduit.executeQuery (zQueryProduit) ;
			while (oRsProduit.next ())
			{
				Produit oProduit = new Produit();
				
				oProduit.setProduit_id(oRsProduit.getInt("produit_id"));
				oProduit.setCodeProd(oRsProduit.getString("produit_code"));
				oProduit.setProduit_libelle(oRsProduit.getString("produit_libelle"));
				oProduit.setCateg_id(oRsProduit.getInt("categ_id"));
				listProduit.add(oProduit);
				
			}
		}
		catch (SQLException _e)
		{
			System.out.println ("Erreur interne pendant la requete !") ;
			_e.printStackTrace () ;
		}
  		return listProduit;
  	}
  	
  	public Vector<Produit> getListProduct(int _categ_id){
  		Vector<Produit> listProduit = new Vector<Produit>();
    	String zQueryProduit = "SELECT * FROM \"PRODUIT\" where categ_id = "+_categ_id+" order by produit_libelle ASC";
    	
		try
		{
			Statement oStmtProduit = (Statement) oStockDbCnx.createStatement () ;	
			ResultSet oRsProduit = (ResultSet) oStmtProduit.executeQuery (zQueryProduit) ;
			while (oRsProduit.next ())
			{
				Produit oProduit = new Produit();
				
				oProduit.setProduit_id(oRsProduit.getInt("produit_id"));
				oProduit.setCodeProd(oRsProduit.getString("produit_libelle"));
				oProduit.setCateg_id(oRsProduit.getInt("categ_id"));
				listProduit.add(oProduit);
				
			}
		}
		catch (SQLException _e)
		{
			System.out.println ("Erreur interne pendant la requete !") ;
			_e.printStackTrace () ;
		}
  		return listProduit;
  	}
  	
  	public Produit findProductByCode(String _codeProduit){
  		Produit oProduitRes = null;
  		String zQueryProduct = "SELECT produit_id,produit_code,produit_libelle, \"PRODUIT\".categ_id as categ,categ_libelle " +
  				" FROM \"PRODUIT\" ,\"CATEGORIE\" where \"PRODUIT\".categ_id = \"CATEGORIE\".categ_id and produit_code = '"+_codeProduit+"'";
    	System.out.println(zQueryProduct);
		try
		{
			Statement oStmtProduct = (Statement) oStockDbCnx.createStatement () ;	
			ResultSet oRsProduct = (ResultSet) oStmtProduct.executeQuery (zQueryProduct) ;
			if (oRsProduct.next ())
			{
				oProduitRes = new Produit();
				oProduitRes.setProduit_id(oRsProduct.getInt("produit_id"));
				oProduitRes.setCodeProd(oRsProduct.getString("produit_code"));
				oProduitRes.setProduit_libelle(oRsProduct.getString("produit_libelle"));
				oProduitRes.setCateg_id(oRsProduct.getInt("categ"));
				oProduitRes.setCateg_libelle(oRsProduct.getString("categ_libelle"));
			}
		}
		catch (SQLException _e)
		{
			System.out.println ("Erreur interne pendant la requete !") ;
			_e.printStackTrace () ;
		}
  		return oProduitRes;
  		
  	}*/
  	
  	/*public int getMaxtypeFrsId ()
	{
		int iMaxId = 0 ;
		boolean bIsCalled = true ;
		String zQuery = "SELECT LAST_VALUE, IS_CALLED FROM SEQ_ID_FOURNISSEUR" ;
		try
		{
			Statement oStmt = oStockDbCnx.createStatement () ;	
			ResultSet oRs = oStmt.executeQuery (zQuery) ;
			if (oRs.next ())
			{
				iMaxId = oRs.getInt ("LAST_VALUE") ;
				bIsCalled = oRs.getBoolean ("IS_CALLED") ;
				if (bIsCalled)//si deja utilisie dans la base de donnees
				{
					iMaxId++ ;
				}
			}
		}
		catch (SQLException _e)
		{
			System.out.println ("Erreur interne pendant la requÃªte !") ;
			_e.printStackTrace () ;
		}
		return iMaxId ;
	}
  	
  	 //enregistrment d'un produit
  	public boolean storeFournisseur (Fournisseur _oFrs)
  	{
  		boolean bRes = true;
  		String zQuery = "INSERT INTO \"FOURNISSEUR\" (fourn_id,fourn_code,fourn_nom,fourn_adresse,fourn_tel) VALUES (nextval('seq_id_fournisseur'), " ;
  		zQuery +=  NVLSqlStr(_oFrs.getFourn_code()) + ", " ;
  		zQuery +=  NVLSqlStr(_oFrs.getFourn_nom()) + ", " ;
  		zQuery +=  NVLSqlStr(_oFrs.getFourn_adresse()) + ", " ;
  		zQuery +=  NVLSqlStr(_oFrs.getFourn_tel()) + ") " ;
  		
  		try
  		{
  			Statement oStmt = oStockDbCnx.createStatement () ;	
  			oStmt.executeUpdate (zQuery) ;
  		}
  		catch (SQLException _e)
  		{
  			System.out.println ("Erreur interne pendant la mise Ã  jour !") ;
  			bRes = false;
  			_e.printStackTrace () ;
  		}

  		return bRes;
  		
  	}
  	
  	public Vector<Fournisseur> getListFournisseur(){
  		Vector<Fournisseur> listFrs = new Vector<Fournisseur>();
    	String zQuery = "SELECT * FROM \"FOURNISSEUR\" order by fourn_nom ASC";
    	
		try
		{
			Statement oStmtFrs = (Statement) oStockDbCnx.createStatement () ;	
			ResultSet oRsFrs = (ResultSet) oStmtFrs.executeQuery (zQuery) ;
			while (oRsFrs.next ())
			{
				Fournisseur oFournisseur = new Fournisseur();
				
				oFournisseur.setFourn_id(oRsFrs.getInt("fourn_id"));
				oFournisseur.setFourn_code(oRsFrs.getString("fourn_code"));
				oFournisseur.setFourn_nom(oRsFrs.getString("fourn_nom"));
				oFournisseur.setFourn_adresse(oRsFrs.getString("fourn_adresse"));
				oFournisseur.setFourn_tel(oRsFrs.getString("fourn_tel"));
				
				listFrs.add(oFournisseur);
			}
		}
		catch (SQLException _e)
		{
			System.out.println ("Erreur interne pendant la requete !") ;
			_e.printStackTrace () ;
		}
  		return listFrs;
  	}*/
}
